#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define N 4

int p[N+1]; // ciag
void exch(int, int); // wymiana
void print(); // druk ciagu
void generate(int ); // generowanie
int aflag = 0; // flaga dla drukowania
int count = 0; // licznik

int main(int argc, char **argv)
{
  int c;
  int i;
  while ((c = getopt (argc, argv, "pc:")) != -1)
    switch (c)
      {
      case 'p':
	aflag = 1;
	break;
      }
  for (i = 0; i < N+1; ++i) // permutacja ciagu liczb od 1 do n
    p[i] = i;
  generate(N); // generowanie permutacji
  printf("n = %i; licznik = %i\n", N, count);
  return 0;
}

void exch(int i, int j)
{
  int t;
  t = p[i];
  p[i] = p[j];
  p[j] = t;
  count++;
}

void generate(int n)
{
  int i;
  if (n == 1) 
    print();
  for (i = 1; i <= n; i++) { 
    exch(i, n);
    generate(n-1);
    exch(i, n);
  }
}

void print()
{
  int i;
  if(aflag == 1){
    for (i = 1; i < N+1; ++i)
      printf("%i ", p[i]);
    printf("\n");};
}
